home *** CD-ROM | disk | FTP | other *** search
/ Amiga Aktuell / Amiga Aktuell.iso / amiga-aktuell / net tools / tcp tools / select_host / select_host.e < prev    next >
Text File  |  1996-09-05  |  8KB  |  239 lines

  1. /*** select_host.e - NapsaTerm front end ***/
  2.  
  3.  
  4. OPT PREPROCESS
  5.  
  6. MODULE 'bgui','libraries/bgui','libraries/bgui_macros','intuition/intuition',
  7.        'intuition/classes','intuition/classusr','tools/boopsi',
  8.        'intuition/gadgetclass','utility/tagitem','tools/inithook',
  9.        'utility/hooks','tools/file','dos/dos','devices/inputevent',
  10.        'libraries/gadtools','*editor','dos/dostags'
  11.  
  12. CONST ZERO=0 -> NIL for BPTR's
  13.  
  14. ENUM ID_NULL,ID_LIST,ID_NAME,ID_OK,ID_TELNET,ID_CANCEL,ID_EDIT
  15. ENUM ET_NULL,ET_OK,ET_TELNET,ET_CANCEL
  16.  
  17. RAISE "LIB" IF OpenLibrary()=NIL
  18.  
  19. DEF going=TRUE,etype,wnd
  20. DEF listv,naam,okbut,tnetbut,annbut,h:hook
  21. DEF m=NIL,l,n,names:PTR TO LONG
  22. DEF filename:PTR TO CHAR
  23.  
  24. PROC main() HANDLE
  25.   DEF wd_obj=NIL,sig,rc,in,fstr
  26.   DEF str:PTR TO CHAR,i,out
  27.   DEF dSecs=0,dMicro=0,dClicked=-1,se=0,mi=0,cl=-1
  28.   DEF s[256]:STRING
  29.   DEF nm:PTR TO newmenu
  30.   filename:='PROGDIR:hostnames'
  31.   m,l:=readfile(filename)
  32.   n:=countstrings(m,l)
  33.   names:=stringsinfile(m,l,n+1)
  34.   bguibase:=OpenLibrary('bgui.library',37)
  35.   nm:=[ 1,0,'Project',0,0,0,0,
  36.          2,0,'Edit hostnames','E',0,0,ID_EDIT,
  37.          2,0,-1,0,0,0,0,
  38.          2,0,'Start session',0,0,0,0,
  39.           3,0,'RLogin','R',0,0,ID_OK,
  40.           3,0,'Telnet','T',0,0,ID_TELNET,
  41.          2,0,-1,0,0,0,0,
  42.          2,0,'Cancel','Q',0,0,ID_CANCEL,
  43.        0,0,NIL,0,0,0,0]:newmenu
  44.   wd_obj:=WindowObject,
  45.     WINDOW_TITLE,'Select host for NapsaTerm',
  46. ->    WINDOW_CLOSEGADGET,FALSE,
  47. ->    WINDOW_SIZEGADGET,FALSE,
  48.     WINDOW_AUTOASPECT,TRUE,
  49.     WINDOW_POSITION,POS_CENTERMOUSE,
  50.     WINDOW_SCALEWIDTH,30,
  51.     WINDOW_SCALEHEIGHT,30,
  52.     WINDOW_IDCMPHOOKBITS,IDCMP_RAWKEY,
  53.     WINDOW_IDCMPHOOK,inithook(h,{idcmphook}),
  54.     WINDOW_CLOSEONESC,TRUE,
  55.     WINDOW_MENUSTRIP,nm,
  56.     WINDOW_MASTERGROUP,
  57.       VGroupObject,Spacing(4),HOffset(4),VOffset(4),
  58.       GROUP_BACKFILL,SHINE_RASTER,
  59. ->        StartMember,listv:=StrListviewSorted('_Lijst',names,ID_LIST),EndMember,
  60.         StartMember,
  61.           listv:=ListviewObject,
  62.             LAB_LABEL,'_List',
  63.             LAB_UNDERSCORE,"_",
  64.             LAB_PLACE,PLACE_ABOVE,
  65.             LISTV_ENTRYARRAY,names,
  66.             LISTV_SORTENTRYARRAY,TRUE,
  67.             GA_ID,ID_LIST,
  68.           EndObject,
  69.         EndMember,
  70.         StartMember,naam:=KeyString('_Name:','',50,ID_NAME),FixMinHeight,EndMember,
  71.         StartMember,HGroupObject,Spacing(4),
  72.           StartMember,okbut:=KeyButton('_RLogin',ID_OK),EndMember,
  73. ->          VarSpace(DEFAULT_WEIGHT),
  74.           StartMember,tnetbut:=KeyButton('_Telnet',ID_TELNET),EndMember,
  75.           StartMember,annbut:=KeyButton('_Cancel',ID_CANCEL),EndMember,
  76.         EndObject,FixMinHeight,EndMember,
  77.       EndObject,
  78.   EndObject
  79.   IF wd_obj=NIL THEN Raise("OBJ")
  80.   GadgetKey(wd_obj,listv,'l')
  81.   GadgetKey(wd_obj,naam,'n')
  82.   GadgetKey(wd_obj,okbut,'r')
  83.   GadgetKey(wd_obj,tnetbut,'t')
  84.   GadgetKey(wd_obj,annbut,'c')
  85.   AddMap(listv,naam,[LISTV_ENTRY,STRINGA_TEXTVAL,0])
  86.   wnd:=WindowOpen(wd_obj)
  87.   IF wnd=NIL THEN Raise("WIN")
  88.   GetAttr(WINDOW_SIGMASK,wd_obj,{sig})
  89.   WHILE going
  90.     Wait(sig)
  91.     WHILE (rc:=HandleEvent(wd_obj))<>WMHI_NOMORE
  92.       SELECT rc
  93.         CASE WMHI_CLOSEWINDOW; going:=FALSE; etype:=ET_CANCEL
  94.         CASE ID_OK; going:=FALSE; etype:=ET_OK
  95.         CASE ID_TELNET; going:=FALSE; etype:=ET_TELNET
  96.         CASE ID_CANCEL; going:=FALSE; etype:=ET_CANCEL
  97.         CASE ID_NAME; going:=FALSE; etype:=ET_TELNET
  98.         CASE ID_LIST
  99.           CurrentTime({se},{mi})
  100.           GetAttr(LISTV_LASTCLICKED,listv,{cl})
  101.           IF DoubleClick(dSecs,dMicro,se,mi) AND (cl=dClicked)
  102.             going:=FALSE
  103.             etype:=ET_TELNET
  104.           ENDIF
  105.           dSecs:=se
  106.           dMicro:=mi
  107.           dClicked:=cl
  108.         CASE ID_EDIT
  109.           WindowBusy(wd_obj)
  110.           editor(filename)
  111.           freefile(m); m:=NIL
  112.           m,l:=readfile(filename)
  113.           n:=countstrings(m,l)
  114.           names:=stringsinfile(m,l,n+1)
  115.           ClearList(NIL,listv)
  116.           FOR i:=0 TO ListLen(names)
  117.             EXIT names[i]=NIL
  118.             AddEntry(NIL,listv,names[i],LVAP_TAIL)
  119.           ENDFOR
  120.           RefreshList(wnd,listv)
  121.           WindowReady(wd_obj)
  122.       ENDSELECT
  123.     ENDWHILE
  124.     IF going=FALSE AND (etype=ET_OK OR (etype=ET_TELNET))
  125.       GetAttr(STRINGA_TEXTVAL,naam,{str})
  126.       IF str
  127.         IF StrCmp(str,'')
  128.           going:=TRUE
  129.           etype:=ET_NULL
  130.           DisplayBeep(NIL)
  131.         ENDIF
  132.       ELSE
  133.         going:=TRUE
  134.         etype:=ET_NULL
  135.       ENDIF
  136.       IF going=FALSE
  137.         GetAttr(STRINGA_TEXTVAL,naam,{str})
  138. ->        WriteF('\s ',str)
  139.         FOR i:=0 TO ListLen(names)
  140.           IF names[i]=NIL THEN i:=-1
  141.           EXIT i=-1
  142.           EXIT StrCmp(str,names[i])
  143.         ENDFOR
  144.         IF i>=0
  145. ->          WriteF('is bekend (nummer=\d)\n',i)
  146.         ELSE
  147. ->          WriteF('is onbekend\n')
  148.           IF req_onbekend(str)
  149.             IF out:=openappend(filename)
  150.               Fputs(out,str)
  151.               FputC(out,"\n")
  152.               Close(out)
  153.             ELSE
  154.               Throw("OPEN",filename)
  155.             ENDIF
  156.           ELSE
  157.             going:=TRUE
  158.             etype:=ET_NULL
  159.             ActivateGadget(naam,wnd,NIL)
  160.           ENDIF
  161.         ENDIF
  162.       ENDIF
  163.     ENDIF
  164.   ENDWHILE
  165.   WindowClose(wd_obj)
  166.   IF etype=ET_OK OR (etype=ET_TELNET)
  167.     StringF(s,'NapsaTerm\s \s',IF etype=ET_TELNET THEN ' -d TELNET' ELSE ' -d NET',str)
  168. ->    WriteF('\s\n',s)
  169.     IF in:=Open((fstr:='CON:///100/NapsaTerm output window/AUTO/WAIT'),MODE_OLDFILE)
  170.       IF SystemTagList(s,[SYS_ASYNCH,TRUE,SYS_INPUT,in,SYS_OUTPUT,0,0])=-1 THEN Close(in)
  171.     ELSE
  172.       Throw("OPEN",fstr)
  173.     ENDIF
  174.   ENDIF
  175. EXCEPT DO
  176.   IF wd_obj THEN DisposeObject(wd_obj)
  177.   IF bguibase THEN CloseLibrary(bguibase)
  178.   IF m THEN freefile(m)
  179.   SELECT exception
  180.     CASE "LIB";  WriteF('Couldn''t open bgui library.\n')
  181.     CASE "OBJ";  WriteF('Couldn''t create window object.\n')
  182.     CASE "WIN";  WriteF('Couldn''t open window.\n')
  183.     CASE "MEM";  WriteF('Not enough memory.\n')
  184.     CASE "OPEN"; WriteF('Couldn''t open file\s\s\s.\n',IF exceptioninfo THEN ' "' ELSE '',IF exceptioninfo THEN exceptioninfo ELSE '',IF exceptioninfo THEN '"' ELSE '')
  185.   ENDSELECT
  186. ENDPROC
  187.  
  188. PROC openappend(name:PTR TO CHAR)
  189.   DEF fh=ZERO
  190.   IF fh:=Open(name,MODE_OLDFILE)
  191.     IF ChangeMode(CHANGE_FH,fh,EXCLUSIVE_LOCK)=FALSE
  192.       Close(fh)
  193.       fh:=ZERO
  194.     ENDIF
  195.     IF fh
  196.       Seek(fh,0,OFFSET_END)
  197.     ENDIF
  198.   ENDIF
  199. ENDPROC fh
  200.  
  201. PROC req_onbekend(str:PTR TO CHAR)
  202.   DEF rq:bguirequest
  203.   rq.flags:=BREQF_CENTERWINDOW OR BREQF_LOCKWINDOW OR BREQF_AUTO_ASPECT OR BREQF_FAST_KEYS
  204.   rq.title:=NIL
  205.   rq.gadgetformat:='_Add|_Oops'
  206.   rq.textformat:='\s is unknown.'
  207.   rq.reqpos:=POS_CENTERMOUSE -> NOP
  208.   rq.textattr:=NIL
  209.   rq.underscore:="_"
  210.   rq.reserved0:=0
  211.   rq.screen:=NIL -> NOP
  212.   rq.reserved1:=0
  213. ENDPROC BgUI_RequestA(wnd,rq,[str])
  214.  
  215. PROC idcmphook(h:PTR TO hook,obj,imsg:PTR TO intuimessage)
  216.   IF imsg.class=IDCMP_RAWKEY
  217.     IF (imsg.code=67) OR (imsg.code=68); going:=FALSE; etype:=ET_TELNET; ENDIF
  218.     IF imsg.code=$4C -> Omhoog
  219.       IF imsg.qualifier AND (IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT)
  220.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_PAGE_UP,0])
  221.       ELSEIF imsg.qualifier AND (IEQUALIFIER_LALT OR IEQUALIFIER_RALT)
  222.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_FIRST,0])
  223.       ELSE
  224.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_PREVIOUS,0])
  225.       ENDIF
  226.     ENDIF
  227.     IF imsg.code=$4D -> Omlaag
  228.       IF imsg.qualifier AND (IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT)
  229.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_PAGE_DOWN,0])
  230.       ELSEIF imsg.qualifier AND (IEQUALIFIER_LALT OR IEQUALIFIER_RALT)
  231.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_LAST,0])
  232.       ELSE
  233.         SetGadgetAttrsA(listv,wnd,NIL,[LISTV_SELECT,LISTV_SELECT_NEXT,0])
  234.       ENDIF
  235.     ENDIF
  236.   ENDIF
  237. ENDPROC
  238.  
  239.